char *p1="abc"和char p2[ ]="abc"有什么区别?

来源:百度知道 编辑:UC知道 时间:2024/05/29 20:18:44
char *GetMemory1(void)
{
char *p = "hello world";
return p;
}
char *GetMemory2(void)
{
char p[] = "hello world";
return p;
}
void main(void)
{
cout<<GetMemory1()<<endl<<GetMemory2()<<endl;
}
程序的输出是,GetMemory1()是hello world而GetMemory2()的输出是乱码。
对于char *p1="abc",即使在调用函数里面建立的,但"abc"有static const char *的性质吧,离开了调用函数时,把p1传出来还是能打印abc。
但对于char p2[ ]="abc",难道"abc"就不具有static const char *的性质?
char *p1="abc"和char p2[ ]="abc"有什么区别?
char *p1="abc"和char p2[ ]="abc"
"abc"既然是常量字符串,那么应该是在静态数据区分配空间,赋给p1,然后返回没问题,那赋给p2,也应该返回没问题吧?

p1是一个常量字符串,存储在常量存储区,在程序生命期内值不会改变。这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多)
p2是一个局部数组,存储在栈内存,函数运行结束时被释放,当再回去寻找这块内存区域时,肯定就是乱码。。。

p1是指针,指向字符串的存储地址,p2是字符数组,表示存储数据是abc

http://tech.163.com/05/0329/10/1G0LS2O200091589.html

差不多!!